package cn.hsw.platform.core.util;

import cn.hsw.platform.core.configure.PageConfig;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;

/**
 * 分页工具
 * @author 李子木
 * @date 2020-10-30
 */
public class PageUtil {


    private static PageConfig pageConfig = SpringContextUtil.getBean(PageConfig.class);

    /**
     * 获取分页信息
     * @return 分页信息PageRequest
     */
    public static PageRequest pageable(){
        return pageable(null,null,null,null);
    }

    /**
     * 获取分页信息
     * @param size 数量
     * @return 分页信息PageRequest
     */
    public static PageRequest pageable(Integer size){
        return pageable(null,size,null,null);
    }

    /**
     * 获取分页信息
     * @param orderBy 分页字段
     * @return 分页信息PageRequest
     */
    public static PageRequest pageable(String orderBy){
        return pageable(null,null,orderBy,null);
    }

    /**
     * 获取分页信息
     * @param orderBy 分页字段
     * @param direction 排序方式
     * @return 分页信息PageRequest
     */
    public static PageRequest pageable(String orderBy,String direction){
        return pageable(null,null,orderBy,direction);
    }

    /**
     * 获取分页信息
     * @param size 数量
     * @param orderBy 分页字段
     * @param direction 排序方式
     * @return 分页信息PageRequest
     */
    public static PageRequest pageable(Integer size,String orderBy,String direction){
        return pageable(null,size,orderBy,direction);
    }



    /**
     * 获取分页信息
     * @param sort 排序信息
     * @return 分页信息PageRequest
     */
    public static PageRequest pageable(Sort sort){
        return pageable(null,null,sort);
    }

    /**
     * 获取分页信息
     * @param size 数量
     * @param sort 排序信息
     * @return 分页信息PageRequest
     */
    public static PageRequest pageable(Integer size,Sort sort){
        return pageable(null,size,sort);
    }
    /**
     * 获取分页信息
     * @param page 默认页码
     * @param size 默认数量
     * @param sort 排序信息
     * @return 分页信息PageRequest
     */
    public static PageRequest pageable(Integer page,Integer size,Sort sort){
        if(Validator.isEmpty(page)){
            page = ServletUtil.getParameter("page",pageConfig.getPage());
        }
        if(Validator.isEmpty(size)){
            size = ServletUtil.getParameter("size",pageConfig.getSize());
        }
        return pageRequest(page,size,sort);
    }

    /**
     * 获取分页信息
     * @param page 页码
     * @param size 数量
     * @param orderBy 排序字段
     * @param direction 排序方式
     * @return 分页信息PageRequestW
     */
    public static PageRequest pageable(Integer page,Integer size,String orderBy,String direction){
        if(Validator.isEmpty(page)){
            page = ServletUtil.getParameter("page",pageConfig.getPage());
        }
        if(Validator.isEmpty(size)){
            size = ServletUtil.getParameter("size",pageConfig.getSize());
        }
        if(Validator.isNull(orderBy)){
            orderBy = ServletUtil.getParameter("order_by",pageConfig.getOrderBy());
        }
        if(Validator.isNull(direction)){
            direction = ServletUtil.getParameter("direction",pageConfig.getDirection());
        }

        Sort sort = Sort.by(Sort.Direction.fromString(direction),orderBy);
        return pageRequest(page,size,sort);
    }

    /**
     * 获取分页信息
     * @param page 页码
     * @param size 数量
     * @param sort 排序
     * @return 分页信息
     */
    private static PageRequest pageRequest(Integer page,Integer size,Sort sort){
        return PageRequest.of(page-1,size,sort);
    }
}
